package br.com.intelsys.basics.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

/**
 * O SystemSupport existe para abstrair o contato direto da aplicacao com as
 * classes do container da aplicacao (exemplo servlets)
 * 
 * @author Patrick Givisiez
 * 
 */

public final class SystemSupport {
	/**
	 * Header de HTTP: Obtem o host que esta sendo usado para fazer esta
	 * requisicao
	 */
	public static String HEADER_HOST = "Host";

	/**
	 * Header de HTTP: Informa a pagina que serviu de origem para esta
	 * requisicao
	 */
	public static String HEADER_REFERER = "Referer";

	SystemSupport() {

	}

	/**
	 * Retorna o caminho real de um arquivo virtual, por exemplo:<br/>
	 * <br/>
	 * 
	 * Voce informa getRealPath("/index.jsp") e ele te retornara o caminho real
	 * no filesystem
	 * 
	 * @param virtualPath
	 *            Caminho virtual
	 * @return Caminho real
	 */

	public String getRealPath(String virtualPath) {
		ServletContext cont = ServletActionContext.getServletContext();

		return (cont.getRealPath(virtualPath));
	}

	public Map<String, Object> getSessionMap() {
		@SuppressWarnings("unchecked")
		Map<String, Object> mySession = ActionContext.getContext().getSession();

		if (mySession == null) {
			mySession = new HashMap<String, Object>();
			ActionContext.getContext().setSession(mySession);
		}

		return (mySession);
	}

	/**
	 * Lista que manipula os cookies do sistema.<br/>
	 * <br/>
	 * 
	 * Esta lista trabalha com apenas um tipo de objeto:
	 * com.catho.caction.Cookie<br/>
	 * NAO eh do Servlet.<br/>
	 * <br/>
	 * 
	 * Para adicionar um Cookie, basta cria-lo e dar um add() nesta lista. Para
	 * remover, basta chamar remove(nomeDoCookie) e assim por diante.
	 * 
	 * @return Lista de cookies
	 */

	public List<Object> getCookieList() {
		return (new CookieList());
	}

	/**
	 * Retorna um Header do Request da aplicacao
	 * 
	 * @param name
	 *            Nome do Header
	 * @return Conteudo do Header
	 */
	public String getHeader(String name) {
		return (ServletActionContext.getRequest().getHeader(name));
	}
}
